
package main.old.new_2023.last.month_8;


import main.dataStruct.TreeNode;

/**
 * @Description: todo 1448. 统计二叉树中好节点的数目
 * 给你一棵根为 root 的二叉树，请你返回二叉树中好节点的数目。
 * 「好节点」X 定义为：从根到该节点 X 所经过的节点中，没有任何节点的值大于 X 的值。
 *
 * todo 104. 二叉树的最大深度
 * 给定一个二叉树 root ，返回其最大深度。
 * 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
 *
 *
 * @Author: Take-off
 * @Date: 1:00 PM 2023/6/
 * @Param:
 * @return:
 **/
public class Solution0825 {

    //二叉树的最大深度
    public int maxDepth(TreeNode root) {
        if (root == null){
            return 0;
        }else {
            return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;
        }
    }

    //统计二叉树中好节点的数目
    public int goodNodes(TreeNode root) {
        return compareNodes(root,root.val);
    }
    private int compareNodes(TreeNode node,int maxValue){
        if (node == null){
            return 0;
        }
        int left = compareNodes(node.left, Math.max(node.val,maxValue));
        int right = compareNodes(node.right, Math.max(node.val,maxValue));
        return left + right + (maxValue <= node.val ? 1 : 0);
    }




}
